12809
5047
Nedávno jsem spustil část svého JavaScriptu přes Crockford's JSLint a dal následující chybu:
Problém na řádku 1, znak 1: Chybějící výraz „use strict“.
Při hledání jsem si uvědomil, že někteří lidé přidávají „use strict“; do jejich kódu JavaScript. Jakmile jsem přidal prohlášení, chyba se přestala objevovat. Google bohužel neodhalil velkou část historie za tímto řetězcovým prohlášením. Určitě to musí mít něco společného s tím, jak prohlížeč interpretuje JavaScript, ale netuším, jaký by to mělo účinek.
Co je tedy „use strict“; vše o tom, co to znamená, a je to stále relevantní?
Reaguje některý z aktuálních prohlížečů na „používat přísné“; řetězec nebo je to pro budoucí použití? 
Tento článek o přísném režimu Javascript by vás mohl zajímat: John Resig - přísný režim ECMAScript 5, JSON a další
Cituji několik zajímavých částí:
Přísný režim je nová funkce v ECMAScript 5, která umožňuje umístit program nebo funkci do „přísného“ provozního kontextu. Tento přísný kontext zabrání provedení určitých akcí a vyvolá další výjimky.
A:
Přísný režim pomáhá několika způsoby:
Zachytává některé běžné kódovací bloopery, vyvolávající výjimky.
Zabraňuje nebo vyvolává chyby, když jsou prováděny relativně „nebezpečné“ akce (například získání přístupu k globálnímu objektu).
Zakáže funkce, které jsou matoucí nebo špatně promyšlené.
Všimněte si také, že můžete použít "přísný režim" na celý soubor ... Nebo ho můžete použít pouze pro konkrétní funkci (stále cituji z článku Johna Resiga):
// Non-strict code ...
(funkce(){
„use strict“;
// Definujte svou knihovnu striktně ...
}) ();
// Non-strict code ...
Což by mohlo být užitečné, pokud musíte kombinovat starý a nový kód ;-)
Předpokládám tedy, že je to něco jako „use strict“, který můžete použít v Perlu (odtud název?): Pomáhá vám dělat méně chyb tím, že detekuje více věcí, které by mohly vést k rozbití.
Přísný režim nyní podporují všechny hlavní prohlížeče.
V nativních modulech ECMAScript (s příkazy pro import a export) a třídách ES6 je přísný režim vždy povolen a nelze jej deaktivovat.
|
Je to nová funkce ECMAScript 5. John Resig o tom napsal pěkné shrnutí.
Je to jen řetězec, který vložíte do svých souborů JavaScriptu (buď do horní části souboru, nebo dovnitř funkce) a vypadá takto:
„use strict“;
Vložení do kódu by nemělo způsobit žádné problémy s aktuálními prohlížeči, protože je to jen řetězec. Pokud váš kód porušuje pragmu, může to v budoucnu způsobit problémy s vaším kódem. Například pokud aktuálně máte foo = "bar", aniž byste nejprve definovali foo, váš kód začne selhávat ... což je podle mého názoru dobrá věc.
|
Výrok „používat přísně“; dává prohlížeči pokyn, aby použil přísný režim, což je omezená a bezpečnější sada funkcí JavaScriptu.
Seznam funkcí (nevyčerpávající)
Zakáže globální proměnné. (Zachytí chybějící deklarace var a překlepy v názvech proměnných)
Tiché neúspěšné přiřazení způsobí chybu v přísném režimu (přiřazení NaN = 5;)
Pokusy o odstranění nedetekovatelných vlastností budou vyvolány (odstranění Object.prototype)
Vyžaduje, aby všechny názvy vlastností v literálu objektu byly jedinečné (var x = {x1: "1", x1: "2"})
Názvy funkčních parametrů musí být jedinečné (součet funkcí (x, x) {...})
Zakazuje osmičkovou syntaxi (var x = 023; někteří vývojáři nesprávně předpokládají, že předchozí nula nic nezmění.)
Zakazuje klíčové slovo s
eval v přísném režimu nezavádí nové proměnné
Zakazuje mazání jednoduchých jmen (smazat x;)
Zakáže vazbu nebo přiřazení jmen eval a argumentů v jakékoli formě
Přísný režim nealiasuje vlastnosti objektu argumentů s formálními parametry. (tj. ve funkci sum (a, b) {návratové argumenty [0] + b;} Funguje to, protože argumenty [0] jsou vázány na a atd.)
arguments.callee není podporován
[Odkaz: Přísný režim, Mozilla Developer Network]
|
Pokud se lidé obávají používání striktního použití, může se vyplatit podívat se na tento článek:
Podpora „přísného režimu“ ECMAScript 5 v prohlížečích. Co to znamená? NovoGeek.com - Krišnův weblog
Mluví o podpoře prohlížeče, ale hlavně o tom, jak s ní bezpečně zacházet:
funkce isStrictMode () {
návrat! toto;
}
/ *
vrací false, protože 'this' odkazuje na globální objekt a
„! toto“ se stává nepravdivým
* /
funkce isStrictMode () {
„use strict“;
návrat! toto;
}
/ *
vrací true, protože v přísném režimu klíčové slovo „this“
neodkazuje na globální objekt, na rozdíl od tradičního JS.
Takže zde je „toto“ „nedefinováno“ a „! Toto“ se stává skutečností.
* /
|
Slovo opatrnosti, všichni programátoři s tvrdým nabíjením: použití příkazu „use strict“ na stávající kód může být nebezpečné! Tato věc není nějaká samolepka se šťastným obličejem, kterou můžete nalepit na kód, aby byl „lepší“. Díky pragmatu „use strict“ prohlížeč najednou na náhodných místech ODHALÍ výjimky, které nikdy nezavrhl, protože právě na tom místě děláte něco, co šťastně povoluje výchozí / uvolněný JavaScript, ale přísný ošklivý JavaScript! Můžete mít narušení přísnosti, které se skrývá v zřídka použitých hovorech ve vašem kódu, které způsobí výjimku, až se nakonec spustí - řekněme v produkčním prostředí, které používají vaši platící zákazníci!
Pokud se chystáte propadnout, je dobré použít „použít přísný“ vedle komplexních testů jednotek a přísně nakonfigurované úlohy sestavení JSHint, která vám dá jistotu, že ve vašem modulu není žádný temný roh, který by vybuchl strašně jen proto, že jste zapnuli přísný režim. Nebo, hej, je tu ještě jedna možnost: jednoduše nepřidávejte výraz „use strict“ k žádnému ze starších kódů, je to tak pravděpodobně bezpečnější. DEFINITELNĚ NEPŘIDÁVEJTE „use strict“ k žádným modulům, které nevlastníte neboudržovat, stejně jako moduly třetích stran.
Myslím, že i když se jedná o smrtící zvíře v kleci, „použít přísné“ mohou být dobré věci, ale musíte to udělat správně. Nejlepší čas na přísnost je, když je váš projekt na zelené louce a vy začínáte od nuly. Nakonfigurujte JSHint / JSLint se všemi varováními a možnostmi nataženými tak těsně, jak jen váš tým dokáže žaludek, získejte dobrý systém sestavení / testování / prosazování du jour zmanipulovaný jako Grunt + Karma + Chai a teprve poté začněte označovat všechny své nové moduly jako používat přísné ". Buďte připraveni vyléčit spoustu nepříjemných chyb a varování. Ujistěte se, že každý chápe gravitaci konfigurací sestavení na FAIL, pokud JSHint / JSLint způsobí jakékoli porušení.
Můj projekt nebyl projektem na zelené louce, když jsem přijal „use strict“. Výsledkem je, že moje IDE je plné červených značek, protože na polovinu svých modulů nemám „use strict“ a JSHint si na to stěžuje. Připomíná mi to, jaké refaktorování bych měl v budoucnu udělat. Mým cílem je zbavit se červené značky kvůli všem mým chybějícím výrokům „používám přísné“, ale to už je let.
|
Použití výrazu „use strict“; neudělá váš kód najednou lépe.
Striktní režim JavaScriptu je funkce v ECMAScript 5. Striktní režim můžete povolit deklarováním v horní části skriptu / funkce.
'use strict';
Když stroj JavaScript uvidí tuto směrnici, začne interpretovat kód ve zvláštním režimu. V tomto režimu jsou vyvolány chyby, když jsou detekovány určité postupy kódování, které by mohly skončit jako potenciální chyby (což je důvodem přísného režimu).
Zvažte tento příklad:
var a = 365;
var b = 030;
Ve své posedlosti řadit číselné literály vývojář nechtěně inicializoval proměnnou b osmičkovým literálem. Non-strict mode will interpr this as a numeric literal with value 24 (in base 10). Přísný režim však způsobí chybu.
Neúplný seznam specialit v přísném režimu najdete v této odpovědi.
Kde mám použít „use strict“ ;?
V mé nové aplikaci JavaScriptu: Absolutně! Přísný režim lze použít jako informátora, když s kódem děláte něco hloupého.
V mém stávajícím kódu JavaScript: Pravděpodobně ne! Pokud váš stávající kód JavaScript obsahuje příkazy, které jsou v přísném režimu zakázány, aplikace se jednoduše rozbije. Pokud chcete přísný režim, měli byste být připraveni na ladění a opravu existujícího kódu. To je důvod, proč používat „use strict“; neudělá váš kód najednou lépe.
Jak mohu použít přísný režim?
Vložte „use strict“; prohlášení v horní části skriptu:
// Soubor: myscript.js
'use strict';
var a = 2;
....
Všimněte si, že vše v souboru myscript.js bude interpretováno v přísném režimu.
Nebo vložte „use strict“; prohlášení v horní části těla funkce:
funkce doSomething () {
'use strict';
...
}
Všechno v lexikálním rozsahu funkce doSomething bude interpretováno v přísném režimu. Zde je důležité slovo lexikální rozsah. Například pokud váš přísný kód volá funkci knihovny, která není přísná, pouze váš kód je spuštěn v přísném režimu a ne volaná funkce. Pro lepší vysvětlení viz tato odpověď.
Jaké věci jsou zakázány v přísném režimu?
Našel jsem pěkný článek popisující několik věcí, které jsou v přísném režimu zakázány (všimněte si, že nejde o exkluzivní seznam):
Rozsah
Historicky byl JavaScript zmatený ohledně toho, jak funguje
jsou vymezeny. Někdy se zdá, že mají statický rozsah, ale některé
Díky funkcím se chovají, jako by byly dynamicky vymezeny. Tohle je
matoucí, což ztěžuje čtení a pochopení programů.
Nedorozumění způsobuje chyby. Je to také problém pro výkon.
Statický rozsah by umožňoval proměnnou vazbu při kompilaci
čas, ale požadavek na dynamický rozsah znamená, že vazba musí být
odloženo na běhovou dobu, která přichází s významným výkonem
trest.
Přísný režim vyžaduje, aby byla veškerá variabilní vazba provedena staticky.
To znamená, že funkce, které dříve vyžadovaly dynamickou vazbu
musí být odstraněny nebo upraveny. Konkrétně se jedná o příkaz
vyloučena a schopnost evální funkce manipulovat s
prostředí volajícího je přísně omezeno.
Jednou z výhod přísného kódu je, že nástroje jako YUI Compressor
může při zpracování udělat lepší práci.
Implikované globální proměnné
JavaScript implikoval globální proměnné. Li
proměnnou výslovně nedeklarujete, globální proměnná ano
implicitně deklarováno pro vás. To usnadňuje programování
začátečníci, protože mohou zanedbávat některé ze svých základních úklidů
práce. Díky tomu je ale správa větších programů mnohem více
obtížné a výrazně to snižuje spolehlivost. Takže přísně
režimu se implicitní globální proměnné již nevytvářejí. Měl by jsi
výslovně deklarujte všechny své proměnné.
Globální únik
Existuje řada situací, které by to mohly způsobit
být svázán s globálním objektem. Například pokud zapomenete
při volání konstruktoru zadejte novou předponufunkce,
konstruktor to bude neočekávaně svázán s globálním objektem, takže
místo inicializace nového objektu bude místo toho potichu
manipulace s globálními proměnnými. V těchto situacích bude přísný režim
místo toho svázat to undefined, což způsobí, že konstruktor
místo toho hodit výjimku, což umožňuje mnohem detekovat chybu
dříve.
Hlučné selhání
JavaScript měl vždy vlastnosti jen pro čtení, ale vy
jste je nemohli vytvořit sami, dokud Object.createProperty na ES5
funkce tuto schopnost odhalila. Pokud jste se pokusili přiřadit hodnotu
na vlastnost jen pro čtení, potichu by selhala. Zadání ano
nezměníte hodnotu nemovitosti, ale váš program bude postupovat jako
ačkoli měl. Toto je riziko integrity, které může způsobit, že programy
přejít do nekonzistentního stavu. V přísném režimu se pokus o změnu a
vlastnost jen pro čtení vyvolá výjimku.
Osmičkový
Osmičkové (nebo základní 8) zastoupení čísel bylo extrémně
užitečné při programování na úrovni strojů na strojích, jejichž slovo
velikosti byly násobkem 3. Při práci s CDC jste potřebovali osmičkový
6600 sálových počítačů, které měly velikost slova 60 bitů. Kdybys mohl číst
osmičkový, můžete se podívat na slovo jako 20 číslic. Zastoupeny dvě číslice
operační kód a jedna číslice identifikovala jeden z 8 registrů. Během
pomalý přechod ze strojových kódů do jazyků vysoké úrovně, to byl
považováno za užitečné poskytovat osmičkové tvary v programovacích jazycích.
V C byla extrémně nešťastná reprezentace osmičkovosti
vybráno: Úvodní nula. Takže v C znamená 0100 64, ne 100 a 08 je
chyba, ne 8. Ještě více bohužel tento anachronismus byl
zkopírovány do téměř všech moderních jazyků, včetně JavaScriptu, kde
používá se pouze k vytváření chyb. Nemá to žádný jiný účel. Takže dovnitř
přísný režim, osmičkové tvary již nejsou povoleny.
A tak dále
Argumenty pseudo pole se stanou o něco více
pole jako v ES5. V přísném režimu ztrácí volaného a volajícího
vlastnosti. Díky tomu je možné předat vaše argumenty nedůvěryhodným
kód, aniž by se vzdal mnoha důvěrných kontextů. Také
vlastnost argumentů funkcí je vyloučena.
V přísném režimu vytvoří duplicitní klíče v literálu funkce a
chyba syntaxe. Funkce nemůže mít dva parametry se stejným názvem.
Funkce nemůže mít proměnnou se stejným názvem jako jedna z jejích
parametry. Funkce nemůže odstranit své vlastní proměnné. Pokus o
smazat nekonfigurovatelnou vlastnost nyní vyvolá výjimku. Primitivní
hodnoty nejsou implicitně zabaleny.
Vyhrazená slova pro budoucí verze JavaScriptu
ECMAScript 5 přidává seznam vyhrazených slov. Pokud je použijete jako proměnné nebo argumenty, přísný režim způsobí chybu. Vyhrazená slova jsou:
nářadí, rozhraní, nechat, zabalit, soukromé, chráněné, veřejné, statické a výnos
Další čtení
Přísný režim - JavaScript | MDN
Podpora prohlížeče pro přísný režim
Přechod do přísného režimu
|
Důrazně doporučuji každému vývojáři, aby nyní začal používat přísný režim. Podporuje jej dostatek prohlížečů, takže přísný režim nás legitimně pomůže zachránit před chybami, o kterých jsme ve vašem kódu ani nevěděli.
Zdá se, že v počáteční fázi budou chyby, s nimiž jsme se nikdy předtím nesetkali. Abychom získali plnou výhodu, musíme po přepnutí do přísného režimu provést řádné testování, abychom se ujistili, že jsme vše zachytili. Rozhodně v našem kódu nepoužíváme pouze use strict a předpokládáme, že nedochází k žádným chybám. Odchod tedy spočívá v tom, že je čas začít používat tuto neuvěřitelně užitečnou jazykovou funkci k psaní lepšího kódu.
Například,
var osoba = {
název: 'xyz',
pozice: 'abc',
fullname: function () {"use strict"; vrátit this.name; }
};
JSLint je debugger napsaný Douglasem Crockfordem. Jednoduše vložte svůj skript a rychle vyhledá jakékoli znatelné problémy a chyby v kódu.
|
Chtěl bych nabídnout poněkud fundovanější odpověď doplňující ostatní odpovědi. Doufal jsem, že upravím nejoblíbenější odpověď, ale neuspěl jsem. Snažil jsem se, aby to bylo co nejkomplexnější a nejúplnější.
Další informace najdete v dokumentaci MDN.
„use strict“ směrnice zavedená v ECMAScript 5.
Směrnice jsou podobné výrokům, přesto se liší.
use strict neobsahuje klíčová slova: Direktiva je příkaz jednoduchého výrazu, který se skládá ze speciálního řetězcového literálu (v jednoduchých nebo dvojitých uvozovkách). Stroje JavaScriptu, které neimplementují ECMAScript 5, vidí pouze výrazový výraz bez vedlejších účinků. Očekává se, že budoucí verze standardů ECMAScript zavedou použití jako skutečné klíčové slovo; citace by tím zastaraly.
use strict lze použít pouze na začátku skriptu nebo funkce, tj. musí předcházet každé další (skutečné) prohlášení. Nemusí to být první instrukce ve skriptu funkce: mohou jí předcházet další výrazy výrazů, které se skládají z řetězcových literálů (a JavaScriptu)implementace je mohou považovat za směrnice specifické pro implementaci). Příkazy řetězcových literálů, které následují za prvním skutečným příkazem (ve skriptu nebo funkci), jsou příkazy jednoduchého výrazu. Tlumočníci je nesmí interpretovat jako směrnice a nemají žádný účinek.
Direktiva use strict označuje, že následující kód (ve skriptu nebo funkci) je přísný kód.
Kód na nejvyšší úrovni skriptu (kód, který není ve funkci) se považuje za přísný kód, pokud skript obsahuje direktivu use strict.
Obsah funkce je považován za přísný kód, když je samotná funkce definována v přísném kódu nebo když funkce obsahuje direktivu use strict.
Kód předaný metodě eval () je považován za přísný kód, když byl eval () volán z přísného kódu nebo obsahuje samotnou direktivu use strict.
Přísný režim ECMAScript 5 je omezená podmnožina jazyka JavaScript, která eliminuje relevantní deficity jazyka a obsahuje přísnější kontrolu chyb a vyšší zabezpečení. V následujícím seznamu jsou uvedeny rozdíly mezi přísným režimem a normálním režimem (z nichž první tři jsou obzvláště důležité):
Příkaz with-nelze použít v přísném režimu.
V přísném režimu musí být deklarovány všechny proměnné: pokud přiřadíte hodnotu identifikátoru, který nebyl deklarován jako proměnná, funkce, parametr funkce, parametr klauzule catch nebo vlastnost globálního objektu, získáte ReferenceError. V normálním režimu je identifikátor implicitně deklarován jako globální proměnná (jako vlastnost globálního objektu)
V přísném režimu má klíčové slovo this hodnotu undefined ve funkcích, které byly vyvolány jako funkce (ne jako metody). (V normálním režimu to vždy ukazuje na globální objekt). Tento rozdíl lze použít k testování, zda implementace podporuje přísný režim:
var hasStrictMode = (function () {"use strict"; return this === undefined} ());
Také když je funkce vyvolána pomocí call () nebo použita v přísném režimu, pak je to přesně hodnota prvního argumentu volání call () nebo apply (). (V normálním režimu jsou hodnoty null a undefined nahrazeny globálním objektem a hodnoty, které nejsou objekty, jsou vrženy do objektů.)
V přísném režimu dostanete TypeError, když se pokusíte přiřadit k vlastnostem pouze pro čtení nebo definovat nové vlastnosti pro neroztažitelný objekt. (V normálním režimu oba jednoduše selžou bez chybové zprávy.)
V přísném režimu při předávání kódu eval () nemůžete deklarovat ani definovat proměnné nebo funkce v rozsahu volajícího (jak to můžete udělat v normálním režimu). Místo toho je pro eval () vytvořen nový obor a proměnné a funkce jsou v tomto oboru. Tento obor je zničen poté, co eval () dokončí provádění.
V přísném režimu obsahuje argumenty-objekt funkce statickou kopii hodnot, které jsou předány této funkci. V normálním režimu má argumenty-objekt poněkud „magické“ chování: Prvky pole a pojmenované funkční parametry odkazují na stejnou hodnotu.
V přísném režimu dostanete SyntaxError, když za operátorem odstranění následuje nekvalifikovaný identifikátor (proměnná, funkce nebo parametr funkce). V normálním režimu by výraz mazání nic nedělal a je vyhodnocen jako nepravdivý.
V přísném režimu dostanete TypeError, když se pokusíte odstranit nekonfigurovatelnou vlastnost. (V normálním režimu pokus jednoduše selže a výraz mazání je vyhodnocen jako nepravdivý).
V přísném režimu se považuje za syntaktickou chybu, když se pokusíte definovat několik vlastností se stejným názvem pro literál objektu. (V normálním režimu není chyba.)
V přísném režimu se považuje za syntaktickou chybu, když deklarace funkce má více parametrů se stejným názvem. (V normálním režimu není chyba.)
V přísném režimu nejsou osmičkové literály povoleny (jedná se o literály, které začínají 0x. (V normálním režimu některé implementace umožňují osmičkové literály.)
V přísném režimu jsou identifikátory eval a argumenty považovány za klíčová slova. Nemůžete změnit jejich hodnotu, nemůžete jim přiřadit hodnotu a nemůžete je použít jako názvy proměnných, funkcí, funkčních parametrů nebo identifikátorů blokovacího bloku.
V přísném režimu je více omezení možností prozkoumat zásobník volání. argumenty.caller a argumenty.volání způsobí TypeError ve funkci v přísném režimu. Kromě toho některé vlastnosti volajícího a argumentů funkcí v přísném režimu způsobí TypeError, když se je pokusíte přečíst.
|
Moje dva centy:
Jedním z cílů přísného režimu je umožnit rychlejší ladění problémů. Pomáhá vývojářům vyvoláním výjimky, když dojde k určitým nesprávným věcem, které mohou způsobit tiché a podivné chování vaší webové stránky. V okamžiku, kdy použijeme use strict, kód vyhodí chyby, které vývojáři pomohou opravit je předem.
Několik důležitých věcí, které jsem se naučil po použití use strict:
Brání globální deklaraci proměnných:
var strom1Data= {name: 'Banana Tree', age: 100, leafCount: 100000};
funkční strom (typeOfTree) {
různý věk;
var listCount;
age = typeOfTree.age;
leafCount = typeOfTree.leafCount;
nameoftree = typeOfTree.name;
};
var strom1 = nový strom (tree1Data);
console.log (okno);
Nyní tento kód vytváří nameoftree v globálním rozsahu, ke kterému lze přistupovat pomocí window.nameoftree. Když implementujeme use strict, kód by způsobil chybu.
Uncaught ReferenceError: nameoftree není definován
Vzorek
Eliminuje se prohlášením:
s příkazy nelze minifikovat pomocí nástrojů, jako je uglify-js. Jsou také zastaralé a odstraněny z budoucích verzí JavaScriptu.
Vzorek
Zabraňuje duplikátům:
Když máme duplicitní vlastnost, vyvolá to výjimku
Uncaught SyntaxError: Duplicate data property in object literal not
povoleno v přísném režimu
„use strict“;
var tree1Data = {
název: 'Banana Tree',
věk: 100,
počet listů: 100000,
název: 'Banana Tree'
};
Existuje několik dalších, ale potřebuji o tom získat více znalostí.
|
Pokud používáte prohlížeč vydaný zhruba za poslední rok, pravděpodobně podporuje přísný režim JavaScriptu. Pouze starší prohlížeče, které se staly aktuálním standardem ECMAScript 5, jej nepodporují.
Citace kolem příkazu zajišťují, že kód bude stále fungovat i ve starších prohlížečích (i když věci, které generují syntaktickou chybu v přísném režimu, obecně způsobí špatné fungování skriptu v některých starších prohlížečích).
|
Když přidáte „use strict“ ;, následující případy před spuštěním skriptu vyvolají SyntaxError:
Dláždí cestu budoucím verzím ECMAScript pomocí jednoho z nově vyhrazených klíčových slov (v předchozí verzi pro ECMAScript 6): implementuje, rozhraní, umožňuje, zabalit, soukromé, chráněné, veřejné, statické a výnos.
Deklarace funkce v blocích
if (a : 3:15)
v : 6: 5
Zde kompilátor hodí referenční chybu. V přísném režimu nám kompilátor neumožňuje použít proměnnou, aniž bychom ji deklarovali. Únikům paměti lze tedy zabránit. Kromě toho můžeme napsat více optimalizovaný kód.
|
Přísný režim eliminuje chyby, které by byly ignorovány v nepřísném režimu, čímž je javascript „bezpečnější“.
Je to považováno za jeden z nejlepších postupů?
Ano, je to považováno za součást osvědčených postupů při práci s javascriptem, aby zahrnoval přísný režim. To se provádí přidáním níže uvedeného řádku kódu do souboru JS.
'use strict';
ve vašem kódu.
Co to znamená pro uživatelské agenty?
Označení, že kód by měl být interpretován v přísném režimu, určuje uživatelským agentům, jako jsou prohlížeče, že by měli s kódem zacházet doslova tak, jak je napsáno, a vyvolat chybu, pokud kód nemá smysl.
Například: Zvažte ve svém souboru .js následující kód:
Scénář 1: [ŽÁDNÝ PŘÍMÝ REŽIM]
var city = "Chicago"
console.log (city) // Vytiskne název města, tj. Chicago
Scénář 2: [ŽÁDNÝ PŘÍMÝ REŽIM]
city ​​= "Chicago"
console.log (city) // Vytiskne název města, tj. Chicago
Proč se tedy v obou případech tiskne název proměnné?
Bez zapnutého přísného režimu uživatelští agenti často procházejí řadou úprav problematického kódu ve snaze, aby to dávalo smysl. Na první pohled to může vypadat jako skvělá věc a práce mimo přísný režim umožňuje lidem namočit si nohy pomocí JavaScriptu, aniž by byly všechny podrobnosti úplně přibity. Jako vývojář však nechci v mém kódu zanechat chybu, protože vím, že by se mohl později vrátit a kousnout mě, a také chci jen napsat dobrý kód. A právě tam pomáhá přísný režim.
Scénář 3: [PŘÍSNÝ REŽIM]
'use strict';
city ​​= "Chicago"
console.log (city) // Reference Reference: asignment is undeclared variable city.
Další tip: Chcete-li zachovat kvalitu kódu pomocí přísného režimu, nemusíte to psát znovu a znovu, zejména pokud máte více souborů JS. Toto pravidlo můžete globálně vynutit v pravidlech eslint následujícím způsobem:
Název souboru: .eslintrc.js
module.exports = {
env: {
es6: pravda
},
pravidla: {
strict: ['error', 'global'],
},
};
Dobře, tak co je zabráněno v přísném režimu?
Použití proměnné bez deklarování způsobí chybu v přísném režimu. To zabrání neúmyslnému vytvoření globálních proměnných v celé vaší aplikaci. To se týká zejména příkladu tisku v Chicagu.
Odstranění proměnné, funkce nebo argumentu je v přísném režimu ne-ne.
„use strict“;
funkce x (p1, p2) {};
smazat x; // To způsobí chybu
V přísném režimu není povoleno duplikování názvu parametru.
„use strict“;
funkce x (p1, p1) {}; // To způsobí chybu
Rezervovaná slova v jazyce Javascript nejsou v přísném režimu povolena. Slova jsou implementované rozhraní, let, balíčky, soukromé, chráněné, veřejné. statický a výtěžek
Podrobnější seznam naleznete v dokumentaci MDN zde: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
|
Vysoce aktivní otázka. Získejte 10 reputace, abyste mohli odpovědět na tuto otázku. Požadavek na reputaci pomáhá chránit tuto otázku před spamem a neodpovědností.
Toto není odpověď, kterou hledáte? Přečtěte si další otázky týkající se značek syntaxe javascript jslint use-strict nebo se zeptejte na vlastní otázku.